var MyComponent = React.createClass({
    render() {
        console.log('MyComponent render');
        return (
            <span>
                {this.props.hello + ' ' + this.state.world}
            </span>
        );
    },
    getInitialState() {
        console.log('MyComponent getInitialState');
        return {
            world: 'World!'
        };
    },
    getDefaultProps() {
        console.log('MyComponent getDefaultProps');
        return {
            hello: 'Hello'
        };
    },
    // propTypes
    // mixins
    // statics
    // displayName

    // 在初始化渲染执行之前立刻调用
    componentWillMount() {
        console.log('componentWillMount');
    },
    // 在初始化渲染执行之后立刻调用一次
    componentDidMount () {
        console.log('componentDidMount');
    },
    // 在组件接收到新的 props 的时候调用, 在初始化渲染的时候，该方法不会调用
    componentWillReceiveProps() {
        console.log('componentWillReceiveProps');
    },
    // 在接收到新的 props 或者 state，将要渲染之前调用
    shouldComponentUpdate() {
        console.log('shouldComponentUpdate');
    },
    // 在接收到新的 props 或者 state 之前立刻调用。在初始化渲染的时候该方法不会被调用。
    // 使用该方法做一些更新之前的准备工作。
    componentWillUpdate () {
        console.log('componentWillUpdate');
    },
    // 在组件的更新已经同步到 DOM 中之后立刻被调用。该方法不会在初始化渲染的时候调用。
    // 使用该方法可以在组件更新之后操作 DOM 元素。
    componentDidUpdate() {
        console.log('componentDidUpdate');
    },
    // 在组件从 DOM 中移除的时候立刻被调用。
    // 在该方法中执行任何必要的清理，比如无效的定时器，或者清除在 componentDidMount 中创建的 DOM 元素。
    componentWillUnmount() {
        console.log('componentWillUnmount');
    }
});

ReactDOM.render(<MyComponent />, document.querySelector('#container1'));